# 导入图像处理库
from PIL import Image
# 导入I/O操作模块
import io
# 导入Base64编码模块
import base64
# 导入操作系统接口模块
import os

def image_to_base64(image_path):
    """
    将图片转换为Base64编码字符串
    
    参数:
        image_path (str): 图片文件路径
    
    返回:
        tuple: (base64编码字符串, MIME类型)，出错时返回(None, None)
    """
    try:
        # 打开图片并检查大小
        with Image.open(image_path) as img:
            # 检查图片大小
            width, height = img.size
            print(f"原始图片尺寸: {width}x{height}")
            
            # 如果图片过大，进行压缩
            max_size = 1024  # 最大尺寸为1024像素
            if width > max_size or height > max_size:
                # 计算压缩比例
                ratio = min(max_size/width, max_size/height)
                new_width = int(width * ratio)
                new_height = int(height * ratio)
                # 使用LANCZOS算法调整图片大小（高质量）
                img = img.resize((new_width, new_height), Image.Resampling.LANCZOS)
                print(f"压缩后图片尺寸: {new_width}x{new_height}")
            
            # 保存压缩后的图片到内存缓冲区
            buffer = io.BytesIO()
            
            # 根据原始格式保存
            file_ext = image_path.split('.')[-1].lower()
            if file_ext == 'png':
                img.save(buffer, format='PNG')
            else:
                # JPEG格式保存，质量85%（平衡质量和大小）
                img.save(buffer, format='JPEG', quality=85)
            
            # 从缓冲区获取二进制数据并编码为Base64
            image_data = buffer.getvalue()
            encoded_string = base64.b64encode(image_data).decode('utf-8')
            
            # 确定MIME类型
            mime_type = 'image/png' if file_ext == 'png' else 'image/jpeg'
            print(f"处理后图片大小: {len(image_data)}字节")
        
        return encoded_string, mime_type
    except Exception as e:
        print(f"图片处理错误: {str(e)}")
        return None, None


def call_openai_api_question_and_answer(client, mime_type, image_base64):
    """
    调用OpenAI API提取题目并生成详细解答
    
    参数:
        client: OpenAI客户端实例
        mime_type (str): 图片MIME类型
        image_base64 (str): 图片Base64编码字符串
    
    返回:
        OpenAI API响应对象
    """
    return client.chat.completions.create(
        model="doubao-seed-1-6-250615",  # 使用的模型名称
        messages=[
            {
                "role": "user",  # 用户角色
                "content": [
                    # 图片内容
                    {
                        "type": "image_url",
                        "image_url": {"url": f"data:{mime_type};base64,{image_base64}"},
                    },
                    # 文本提示
                    {
                            "type": "text",
                            "text": "请处理图片中的题目，完成以下两个任务1. **提取题目内容**（严格按原文照抄，不修改、不遗漏）：解答题/证明题：分步骤书写，每步标注推理依据（【题目内容】题干：【解答】）"
                            },
                ],
            }
        ],
    )